<?php

class WucCombo extends TTemplateControl {
//<editor-fold defaultstate="collapsed" desc="Propiedades">
  public function getTipoCombo() { return $this->getViewState("TipoCombo"); }
  public function setTipoCombo($value) { $this->setViewState("TipoCombo", $value); }

  public function getItemCabecera() { return $this->getViewState("ItemCabecera"); }
  public function setItemCabecera($value) { $this->setViewState("ItemCabecera", $value); }

  public function getSelectedItem() { return $this->getViewState("SelectedItem"); }
  public function setSelectedItem($value) { $this->setViewState("SelectedItem", $value); }

  public function getSelectedValue() { return $this->getViewState("SelectedValue"); }
  public function setSelectedValue($value) { $this->setViewState("SelectedValue", $value); }
  
  public function getSelectedIndex() { return $this->getViewState("SelectedIndex"); }
  public function setSelectedIndex($value) { $this->setViewState("SelectedIndex", $value); }

  public function getEnabled() { return $this->getViewState("Enabled"); }
  public function setEnabled($value) { $this->setViewState("Enabled", $value); }

  public function getFuncionOnChange() { return $this->getViewState("FuncionOnChange"); }
  public function setFuncionOnChange($value) { $this->setViewState("FuncionOnChange", $value); }

  public function getFuncionOnKeyDown() { return $this->getViewState("FuncionOnKeyDown"); }
  public function setFuncionOnKeyDown($value) { $this->setViewState("FuncionOnKeyDown", $value); }

  public function getFuncionOnKeyPress() { return $this->getViewState("FuncionOnKeyPress"); }
  public function setFuncionOnKeyPress($value) { $this->setViewState("FuncionOnKeyPress", $value); }

  public function getFuncionOnFocus() { return $this->getViewState("FuncionOnFocus"); }
  public function setFuncionOnFocus($value) { $this->setViewState("FuncionOnFocus", $value); }

  public function getFuncionOnBlur() { return $this->getViewState("FuncionOnBlur"); }
  public function setFuncionOnBlur($value) { $this->setViewState("FuncionOnBlur", $value); }

  public function getFiltradoPorId() { return $this->getViewState("FiltradoPorId"); }
  public function setFiltradoPorId($value) { $this->setViewState("FiltradoPorId", $value); }

  public function getCssClass() { return $this->getViewState("CssClass"); }
  public function setCssClass($value) { $this->setViewState("CssClass", $value); }

  public function getWidth() { return $this->getViewState("Width"); }
  public function setWidth($value) { $this->setViewState("Width", $value); }

  public function getValorMinimo() { return $this->getViewState("ValorMinimo"); }
  public function setValorMinimo($value) { $this->setViewState("ValorMinimo", $value); }

  public function getValorMaximo() { return $this->getViewState("ValorMaximo"); }
  public function setValorMaximo($value) { $this->setViewState("ValorMaximo", $value); }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * obtiene los registros de base de datos
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function obtenerDatos() {
    $fuenteDatos = "";
    try {
      $tipoCombo = Util::isNull($this->getTipoCombo(),"");
      $filtroId = Util::isNull($this->getFiltradoPorId(), "-1");

      $oCombo = new Combo();
      $oCombo->setTipo($tipoCombo);
      $oCombo->setFiltradoPorId($filtroId);
      $oComboBLL = new ComboBLL();
      $arr = $oComboBLL->listar($oCombo);
      return $arr;

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * carga el combo con los datos requeridos
   * @author VSR, 01/01/2011
   */
  private function cargarCombo() {
    $itemCabecera = "";
    $item = null;
    $selectedValue = "";

    try {
      $tipoCombo = Util::isNull($this->getTipoCombo(),"");
      if($tipoCombo == "RangoNumerico"){
        $this->cargarRangoNumerico();
      } else {
        //recupera la informacion para llenar el combo
        $arr = $this->obtenerDatos();
        $this->ddlCombo->DataSource = $arr;
        $this->ddlCombo->DataTextField = "Texto";
        $this->ddlCombo->DataValueField = "Valor";
        $this->ddlCombo->dataBind();
      }

      //coloca un item de cabecera si existe
      if(!Util::isNullOrEmpty($this->getItemCabecera())) { $itemCabecera = $this->getItemCabecera(); }
      switch(strtoupper($itemCabecera)) {
        case "TODOS":
          $item = new TListItem("--Todos--","-1");
          break;
        case "SELECCIONE":
          $item = new TListItem("--Seleccione--","-100");
          break;
        case "BLANCO":
          $item = new TListItem(" "," ");
          break;
        default:
          $item = null;
          break;
      }
      //se asigna el valor indicado por el usuario
      if(!Util::isNullOrEmpty($this->getSelectedValue())) { $selectedValue = $this->getSelectedValue(); }

      if(!is_null($item)) {
        $this->ddlCombo->Items->insertAt(0, $item);
      }

      if (!Util::isNullOrEmpty($selectedValue)) {
        $this->ddlCombo->SelectedValue = $selectedValue;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa valores de los controles
   * @author VSR, 01/01/2011
   */
  protected function inicializaControles() {
    //setea controles por valor de las propiedades
    if(!Util::isNullOrEmpty($this->getEnabled())) { $this->ddlCombo->Enabled = $this->getEnabled(); }
    if(!Util::isNullOrEmpty($this->getFuncionOnChange())) { $this->ddlCombo->Attributes->Add("onchange",$this->getFuncionOnChange()); }
    if(!Util::isNullOrEmpty($this->getFuncionOnKeyDown())) { $this->ddlCombo->Attributes->Add("onkeydown",$this->getFuncionOnKeyDown()); }
    if(!Util::isNullOrEmpty($this->getFuncionOnKeyPress())) { $this->ddlCombo->Attributes->Add("onkeypress",$this->getFuncionOnKeyPress()); }
    if(!Util::isNullOrEmpty($this->getFuncionOnFocus())) { $this->ddlCombo->Attributes->Add("onfocus",$this->getFuncionOnFocus()); }
    if(!Util::isNullOrEmpty($this->getFuncionOnBlur())) { $this->ddlCombo->Attributes->Add("onblur",$this->getFuncionOnBlur()); }
    if(!Util::isNullOrEmpty($this->getCssClass())) { $this->ddlCombo->CssClass = $this->getCssClass(); }
    if(!Util::isNullOrEmpty($this->getWidth())) { $this->ddlCombo->Width = $this->getWidth(); }
  }

  /**
   * carga valores numericos a partir de un rango
   */
  private function cargarRangoNumerico() {
    $item = null;
    $newHora = "";
    $selectedValue = "";

    try {
      $valorMinimo = Util::isNull($this->getValorMinimo(),"-1");
      $valorMaximo = Util::isNull($this->getValorMaximo(),"-1");

     for($i=$valorMinimo; $i <= $valorMaximo; $i++){
        $newValor = ($i <= 9) ? "0".$i : $i;
        $item = new TListItem($newValor,$newValor);
        $this->ddlCombo->Items->insertAt($i-$valorMinimo, $item);
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Publicos">
  /**
   * obtiene el valor del combo
   * @return <type>
   * @author VSR, 01/01/2011
   */
  public function obtenerSelectedValue() {
    $valor = "";
    if(!Util::isNullOrEmpty($this->getSelectedValue())) {
      $valor = $this->getSelectedValue();
    } else {
      $valor = $this->ddlCombo->SelectedValue;
    }
    return $valor;
  }

  /**
   * obtiene el item del combo
   * @return <type>
   * @author VSR, 01/01/2011
   */
  public function obtenerSelectedItem() {
    $valor = "";
    if(!Util::isNullOrEmpty($this->getSelectedItem())) {
      $valor = $this->getSelectedItem();
    } else {
      $valor = $this->ddlCombo->SelectedItem;
    }
    return $valor;
  }

  /**
   * obtiene el index del combo
   * @return <type>
   * @author VSR, 01/01/2011
   */
  public function obtenerSelectedIndex() {
    $valor = "";
    if(!Util::isNullOrEmpty($this->getSelectedIndex())) {
      $valor = $this->getSelectedIndex();
    } else {
      $valor = $this->ddlCombo->SelectedIndex;
    }
    return $valor;
  }

  /**
   * asigna el valor al combo
   * @return <type>
   * @author VSR, 01/01/2011
   */
  public function asignarSelectedValue($value) {
    if ($this->ddlCombo->Items->Count == 0) { $this->cargarCombo(); }

    if(Util::isNullOrEmpty($value)) {
      $this->ddlCombo->SelectedValue = "-100";
    } else {
      $this->ddlCombo->SelectedValue = $value;
    }
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    //solo la primera vez se carga el combo con los datos
    if (!$this->Page->IsPostBack) {
      if ($this->ddlCombo->Items->Count == 0) { $this->cargarCombo(); }
    }
    $this->inicializaControles();

  }
//</editor-fold>
}

?>
